package socket;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.sun.rowset.CachedRowSetImpl;

import basededatos.ConexionBD;

public class SocketServidor implements Runnable{
	
	private ServerSocket serverSocket;
	private static int puerto = 4000;
	private Socket socket;
	ObjectOutputStream flujoSalida;
	
	
	public void transmitirResultSetSerializable(String consulta) throws SQLException, IOException{
		ConexionBD conexion = new ConexionBD(); //creo conexion a bd
		conexion.Abrir(); //abro conexion a bd
		ResultSet rs = conexion.RealizarConsulta(consulta); //realizo consulta a bd y guardo en resultset
		CachedRowSetImpl crs=new CachedRowSetImpl(); //creo implementacion cachedrow para usarlo como un resultset serializable
		crs.populate(rs); //copio el resultset al "resultset serializable"
		conexion.Cerrar(); //cierro conexion a bd
				
		flujoSalida = new ObjectOutputStream(socket.getOutputStream());
		flujoSalida.writeObject(crs); //escribo en el flujo de salida el resultset serializable
	}
	
	


	@Override
	public void run() {
		
		try{
			serverSocket = new ServerSocket(puerto);
		}
		catch (IOException e) {
			e.printStackTrace();
		}
		
		while(true)
		{
			try {
				socket = serverSocket.accept();
				transmitirResultSetSerializable("call ClientesListar");
			}
			catch (IOException e) {
				e.printStackTrace();
			}
			catch (SQLException e) {
				e.printStackTrace();
			}
			finally{
				try {
					socket.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
		
	}
}
